import java.util.*;
public class MultiSearch {
  public static int[][] multiSearch(String big, String[] smalls) { 
    int n = smalls.length;
    int[][] res = new int[n][];
    for(int i = 0; i<n; i++){
      res[i] = search(big, smalls[i]);
    }
    return res;
  }
  private static int[] search(String big, String small) {
    List<Integer> res = new ArrayList<>();
    int i = 0, j = 0;
    while(i < big.length() && i <= big.length()-small.length() + 1){
      while(j < small.length() && i < big.length() &&big.charAt(i) == small.charAt(j)){
        i++;
        j++;
      }
      if(j == small.length()){
        res.add(i - j);
        
      }
      i = i-j+1;
      j = 0;
    }
    return res.stream().mapToInt(Integer::intValue).toArray();

  }

  public static void main(String[] args) {
    String big = "mississippi";
    String[] smalls = {"is","ppi","hi","sis","i","ssippi"};
    int[][] res = multiSearch(big, smalls);
    for(int[] arr : res){
      for(int i : arr){
        System.out.print(i + " ");
      }
      System.out.println();
    }
  }
}

// 给定一个较长字符串big和一个包含较短字符串的数组smalls，设计一个方法，根据smalls中的每一个较短字符串，对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions，其中positions[i]为smalls[i]出现的所有位置。

// 示例：

// 输入：
// big = "mississippi"
// smalls = ["is","ppi","hi","sis","i","ssippi"]
// 输出： [[1,4],[8],[],[3],[1,4,7,10],[5]]
// 提示：

// 0 <= len(big) <= 1000
// 0 <= len(smalls[i]) <= 1000
// smalls的总字符数不会超过 106。
// 你可以认为smalls中没有重复字符串。
// 所有出现的字符均为英文小写字母